/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fran-Jon
 */
public class AsignarCandidatoAccion implements Accion {


    private final String visualizarconvocatoria = "visualizar-convocatoria-accion";
    private final String listarconvocatorias = "listar-convocatorias-accion";
    /**
     * Recibe un candidato y una convocatoria y se vinculan
     * @param servlet
     * @param request
     * @param response
     * @return el router
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion;
        AccionServlet as=(AccionServlet) servlet;
        sesion = request.getSession();
        AccionRouter router = new AccionRouter("principal");
        ArrayList<String> errores = new ArrayList<String>();
        Integer canId = -1;
        Integer conId = -1;
        ArrayList<Integer> candidatos = new ArrayList<Integer>();
        ArrayList<String> mensajes= new ArrayList<String>();
        boolean realizado = false;

         boolean ejecutar = true;
         String aleatorio = (String) sesion.getAttribute("aleatorio");

        if (aleatorio != null) {
            if (request.getParameter("aleatorio") != null) {
                if (request.getParameter("aleatorio").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crease un alumno (ya se creo anteriormente)
                    ejecutar = false;
                } else {
                    sesion.setAttribute("aleatorio", request.getParameter("aleatorio"));
                }
            }
        } else {
            sesion.setAttribute("aleatorio", request.getParameter("aleatorio"));
        }
        
        if (sesion.getAttribute("usuario")!= null && request.getMethod().equalsIgnoreCase("POST")) {

        ModeloCandidato mcandidato = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        if (Verificador.numeroValido(request.getParameter("idCon"))) {
            conId = Integer.parseInt((String) request.getParameter("idCon"));
            try {
                if (request.getParameterValues("listaCanId") != null) {
                    for (String candidato : (String[]) request.getParameterValues("listaCanId")) {
                        candidatos.add(Integer.parseInt(candidato));
                    }
                }else{
                    errores.add("error-asignacion-candidatos-no-posible");
                    request.setAttribute("errores", errores);
                    candidatos = null;
                }
            } catch (NumberFormatException ex) {
                candidatos = null;
            }
            if (candidatos != null && ejecutar) {
                try {
                    mcandidato.asignarCandidatoAConvocatoria(candidatos, conId);;
                    realizado = true;
                } catch (GestorFormacionExcepcion ex) {
                     Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    sesion.setAttribute("excepciones", ex.getMessage());
                }
            }
            if (realizado) {
                    try {
                        mensajes.add("mensaje-asignar-candidato");
                        sesion.setAttribute("mensajes",mensajes);
                        router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarconvocatoria),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
               
            } else {
                if (request.getParameter("idCon") != null) {
                        try {
                            request.setAttribute("idCon", request.getParameter("idCon"));
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarconvocatoria),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                   
                } else {
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(listarconvocatorias),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                  
                }
            }
        } else {
                try {
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(listarconvocatorias),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(AsignarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
           
        }

        }else{
            router = new AccionRouter("inicio");
        }

        return router;
    }

    
}
